package com.yqh.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.yqh.dao.ProductCategoryDao;
import com.yqh.dto.ProductCategorySearchDTO;
import com.yqh.entity.ProductCategory;
import com.yqh.exception.CustomException;
import com.yqh.service.ProductCategoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;


/**
 * 商品分类模块
 *
 * @author 阳秋豪
 * @createTime 2024/3/22
 */
@Service
public class ProductCategoryServiceImpl implements ProductCategoryService {
    @Autowired
    private ProductCategoryDao productCategoryDao;

    /**
     * 条件分页查询
     *
     * @param productCategorySearchDTO 查询参数
     * @return 商品分页表信息
     */
    @Override
    public PageInfo<ProductCategory> getSearchProduct(ProductCategorySearchDTO productCategorySearchDTO) {
        // 开启分页查询，查询时会按照设置的条件自动加上 limit 进行分页
        PageHelper.startPage(productCategorySearchDTO.getPageNum(), productCategorySearchDTO.getPageSize());
        List<ProductCategory> searchProduct = productCategoryDao.getSearchProduct(productCategorySearchDTO);
        // PageInfo.of(searchProduct) 将查询结果与分页所需数据进行封装，如总记录数
        return PageInfo.of(searchProduct);
    }

    /**
     * 添加商品分类
     *
     * @param productCategory 商品分类信息
     */
    @Override
    public void addProductCategory(ProductCategory productCategory) {
        // 进行重复性判断，通知用户商品名不允许重复
        ProductCategory productCategory1 = productCategoryDao.findByProductName(productCategory.getProductCategoryName());
        if (productCategory1 != null) {
            // 商品已存在
            throw new CustomException("该商品已存在，请重新添加");
        }
        productCategoryDao.addProductCategory(productCategory.getProductCategoryName());
    }

    /**
     * 编辑商品分类
     *
     * @param productCategory 要修改的商品信息
     */
    @Override
    public void alterProduct(ProductCategory productCategory) {
        productCategoryDao.updateProductCategory(productCategory);
    }

    /**
     * 删除商品分类
     *
     * @param productCategoryId 商品分类编号
     */
    @Override
    public void deleteProductCategory(Integer productCategoryId) {
        productCategoryDao.deleteProductCategory(productCategoryId);
    }

    /**
     * 查询所有商品分类信息
     * @return 所有商品分类信息
     */
    @Override
    public List<ProductCategory> getAllProductCategory() {
        return productCategoryDao.getAllProductCategory();
    }
}
